#include "Bomba.h"
#include "Coordenada.h"
#include "Mapa.h"
#include <iostream>

using std::cout;
using std::endl;

Bomba::Bomba(){
}

Bomba::~Bomba(){
}

void Bomba::ubicar(Coordenada coord){
    posicion = coord;
}

void Bomba::explotar(Mapa& mapa) {
    Coordenada coordExplosion(posicion.getX(), posicion.getY());
    mapa.obtenerMaterial(coordExplosion)->recibirExplosion();
    IOcupante* ocupante = mapa.obtenerOcupante(coordExplosion);
    if (ocupante)
        ocupante->recibirExplosion();
    mapa.obtenerMaterial(coordExplosion)->recibirExplosion();
    
    for ( int j = 0; j < 4; j++) {
        Coordenada coordExplosion(posicion.getX(), posicion.getY());
        
        for (int i = 0; i < alcance; i++) {
            // Avance de la onda expansiva
            if      (j == 0) coordExplosion.incrementarX();
            else if (j == 1) coordExplosion.incrementarY();
            else if (j == 2) coordExplosion.decrementarY();
            else if (j == 3) coordExplosion.decrementarX();
            
            // Chequeo si se me termina el mapa
            int x = coordExplosion.getX();
            int y = coordExplosion.getY();
            if (x < 0 || y < 0 || x >= mapa.getTamanio() || y >= mapa.getTamanio()) 
                break;
            
            // Asigno danios
            mapa.obtenerMaterial(coordExplosion)->recibirExplosion();
            IOcupante* ocupante = mapa.obtenerOcupante(coordExplosion);
            if (ocupante)
                ocupante->recibirExplosion();
            
            // Chequeo si el material me permite seguir on la explosion
            if (!mapa.obtenerMaterial(coordExplosion)->permiteDesplazamiento()) 
                break;
        }
    }
    exploto = true;
}

Coordenada Bomba::getPosicion(){
    return posicion;
}

void Bomba::colisionarConBombaPlanta(){
	//No pasa nada
}

void Bomba::colisionarConBomberman(){
	//No pasa nada
}

void Bomba::colisionarConEnemigo(){
	//No pasa nada
}

void Bomba::colisionarConPlanta(){
	//No pasa nada.
}

void Bomba::actuar(Mapa& mapa) {
}

bool Bomba::yaExploto() {
    return exploto;
}
